#include <stdlib.h>
#include "QUEUE.h"

/**
 * Program 4.10 FIFO queue linked-list implementation
 * --------------------------------------------------
 * 维护两个指针：
 * - 头指针，指向队列的第一个元素
 * - 尾指针，指向队列的最后一个元素
 *
 * 问：如何实现put操作？
 * 答：始终在队列最后的元素后插入
 *
 * 问：如何实现get操作？
 * 答：始终在队列首元素前插入
 * --------------------------------------------------
 *
 */
typedef struct QUEUEnode* link;

struct QUEUEnode {
    Item item;
    link next;
};

static link head; //头指针
static link tail; //尾指针

void QUEUEinit(int maxN){
    head = NULL;
    tail = NULL;
}


int QUEUEempty(){
    return head == NULL;
}


void QUEUEput(Item item){
    link t = malloc(sizeof(*t));
    t->item = item;
    t->next = NULL;
    if (head == NULL) {
        tail = t;
        head = tail;
        return ;
    }
    tail->next = t;
    tail = t;
}

Item QUEUEget(){
    Item item = head->item;
    link t = head->next;

    free(head);
    head = t;
    return item;
}